import type {
  AxiosResponse,
  InternalAxiosRequestConfig,
  AxiosRequestConfig
} from 'axios'

/**
 * 拦截器接口，用于定义请求和响应的拦截器
 */
export interface JCInterceptors {
  /**
   * 请求成功时的回调函数，接收一个AxiosRequestConfig类型的参数，返回一个AxiosRequestConfig类型的参数
   * @param config 请求配置
   * @returns
   */
  requestSuccessFn?: (
    config: InternalAxiosRequestConfig
  ) => InternalAxiosRequestConfig

  /**
   * 请求失败时的回调函数，接收一个any类型的参数，返回一个any类型的参数
   * @param error 请求错误
   * @returns
   */
  requestFailureFn?: (error: any) => any

  /**
   * 响应成功时的回调函数，接收一个T类型的参数，返回一个T类型的参数
   * @param response 响应数据
   * @returns
   */
  responseSuccessFn?: (response: AxiosResponse) => AxiosResponse

  /**
   * 响应失败时的回调函数，接收一个any类型的参数，返回一个any类型的参数
   * @param error 响应错误
   * @returns
   */
  responseFailureFn?: (error: any) => any
}

/**
 * 请求配置接口，继承自AxiosRequestConfig，并添加了一个可选属性interceptors，类型为JCInterceptors<T>
 */
export interface JCRequestConfig extends AxiosRequestConfig {
  // 可选属性，类型为JCInterceptors<T>
  interceptors?: JCInterceptors
}
